package com.zjsru.plan2025.oneday;

/**
 * 2302. 统计得分小于 K 的子数组数目
 *
 * @Author: cookLee
 * @Date: 2025-04-28
 */
public class CountSubArray {


    /**
     * 主
     * \
     * 输入：nums = [2,1,4,3,5], k = 10
     * 输出：6
     * 解释：
     * 有 6 个子数组的分数小于 10 ：
     * - [2] 分数为 2 * 1 = 2 。
     * - [1] 分数为 1 * 1 = 1 。
     * - [4] 分数为 4 * 1 = 4 。
     * - [3] 分数为 3 * 1 = 3 。
     * - [5] 分数为 5 * 1 = 5 。
     * - [2,1] 分数为 (2 + 1) * 2 = 6 。
     * 注意，子数组 [1,4] 和 [4,3,5] 不符合要求，因为它们的分数分别为 10 和 36，但我们要求子数组的分数严格小于 10
     * \
     * 输入：nums = [1,1,1], k = 5
     * 输出：5
     * 解释：
     * 除了 [1,1,1] 以外每个子数组分数都小于 5 。
     * [1,1,1] 分数为 (1 + 1 + 1) * 3 = 9 ，大于 5 。
     * 所以总共有 5 个子数组得分小于 5 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        int[] nums = new int[]{2, 1, 4, 3, 5};
        long k = 10;
        System.out.println(new CountSubArray().countSubarrays(nums, k));
    }

    public long countSubarrays(int[] nums, long k) {
        long total = 0;
        int len = nums.length;
        long ans = 0;
        for (int i = 0, j = 0; j < len; j++) {
            total += nums[j];
            while (i <= j && total * (j - i + 1) >= k) {
                total -= nums[i];
                i++;
            }
            ans += j - i + 1;
        }
        return ans;
    }

}
